Copyright © 2021 ARC, All rights reserved
We're going to construct in detail a zero-coupon yield curve, called zero curve as well, with FRAs(Forward Rate Agreements)by using bootstrapping method.
day count convention | months to start | months to end | rate | |
---|---|---|---|---|
0 | Actual360 | 1 | 4 | 0.030 |
1 | Actual360 | 2 | 5 | 0.031 |
2 | Actual360 | 3 | 6 | 0.032 |
3 | Actual360 | 6 | 9 | 0.033 |
4 | Actual360 | 9 | 12 | 0.034 |
The input market data are FRAs rates. Let's list the main FRAs characteristics that will impact our computation of the maturity dates and the related zero rates.
The FRAs have the following characteristics which are implemented by default by our API:
Calendar: parameter specifying the calendar used to determine holidays and business days. In the EUR market the standard TARGET calendar is used (Trans-european Automated Real-time Gross settlement Express Transfer).
The zero rates will be get from the following formula expressing the relationship between the forward rate and the zeros rates in the case of a Simple compounding:
\begin{equation}r_{1,2} = \frac{1}{t_2 - t_1}\left(\frac{1+r_2*\left(t_2-t\right)}{1+r_1*\left(t_1-t\right)} - 1\right) \end{equation}where:
$r_{1,2}$: the forward rate at the future date $t_1$ with maturity $t_2$ (of course $t_2 > t_1$)
$t_2 - t_1$: the year fraction from the date $t_1$ to $t_2$ with day counter Actual/360
$r_1$: the zero rate at date $t$ with the maturity $t_1$ ($t_2 > t$)
$r_2$: the zero rate at date $t$ with the maturity $t_2$ ($t_2 > t_1 > t$)
$t_1$: the year fraction from the date $t_1$ to $t$ with day counter Actual/360
$t_2$: the year fraction from the date $t_2$ to $t$ with day counter Actual/360
Let's note that all our computations on float numbers will be done with 6 decimal points precision.
From the equation (1), we easily deduce that the zero rate with the 4 months maturity will be \begin{equation}r_2 = \frac{\left(1 + r_{1,2}*(t_2 - t_1)\right)*\left(1+r_1*\left(t_1-t\right)\right) - 1}{(t_2-t)} \end{equation}
where in our case: $t$: the settlement date which we are going to compute
$t_1$: the settlement date plus 1M and shifted eventually to a business day
$t_4$: the settlement date plus 4M and shifted eventually to a business day
$r_{1,2}$: the forward rate at the future date $t_1$ with maturity $t_2$
$r_1$: the zero rate at settlement date with maturity 1M
$r_2$: the zero rate at settlement date with maturity 4m which we will compute
First of all, we are going to compute the settlement date. As we mentioned above the trade date is
Thursday, 06 May 2021
As we explained in the paragraph 3 the settlement day of a FRA is 2, so the settlement date is obtained by adding 2 days to the above trade date:
Saturday, 08 May 2021
Because the weekday is Saturday and the business date convention for the FRA is by default ModifiedFollowing, so by applying the TARGER calendar, the settlement date is
Monday, 10 May 2021
Finally, the related maturity dates for 1M and 4M are obtained by adding 1M adn 4M to the above settlement date:
Thursday, 10 Jun 2021
Friday, 10 Sep 2021
Let's note that the above both dates are business days, so we don't need to adjust them. Right now, we are going to compute the accrual times with Actual/360 convention.
For the accrual time $t_1 - t = maturity\_date\_1m - settlement\_date$ from May 10th 2021 and ending at June 10th 2021; it last 31 days, so the accrual time will be 31/360
0.086111
For the accrual time $t_2 - t = maturity\_date\_4m - settlement\_date$ from May 10th 2021 and ending at Sep 10th 2021; it last 123 days, so the accrual time will be 123/360
0.341667
For the accrual time $t_2 - t_1 = maturity\_date\_4m - maturity\_date\_1m$ from Jun 10th 2021 and ending at Sep 10th 2021; it last 92 days, so the accrual time will be 92/360
0.255556
The specified forward rate $r_{1,2}$ is 0.030. Because the zero rate with maturity 1M is not provided, the API will suppose that all the zer o rates are constant from the settlement date until the maturity 4M and equal to 0.030.
So by replacing in the equation (2) all the variables by their above computed value, we get
r2 = ((1 + r * t)*(1 + r1*t1) - 1)/t2
0.030058
In order to compute this zero rate, we will use the formula (1) as well. To do so, we will use the second FRA which is 3-month contract starts in 2M from the settlement date. First of all we should compute the value for each variable of the formula.
As in the previous paragraph, the maturity dates for 2M and 5M are obtained by adding 2M adn 5M to the above settlement date and will be
Saturday, 10 Jul 2021
Sunday, 10 Oct 2021
Let's note that the above both dates are weekend days, so we should shift them to business days and will be.
Monday, 12 Jul 2021 Monday, 11 Oct 2021
Right now, we are going to compute the different accrual times with Actual/360 convention.
For the accrual time $t_1 - t = maturity\_date\_2m - settlement\_date$ from May 10th 2021 and ending at Jul 12th 2021; it last 63 days, so the accrual time will be 63/360
0.175000
For the accrual time $t_2 - t = maturity\_date\_5m - settlement\_date$ from May 10th 2021 and ending at Oct 12th 2021; it last 154 days, so the accrual time will be 154/360
0.427778
For the accrual time $t_2 - t_1 = maturity\_date\_5m - maturity\_date\_2m$ from Jul 12th 2021 and ending at Oct 12th 2021; it last 91 days, so the accrual time will be 91/360
0.252778
The specified forward rate $r_{1,2}$ is 0.031 and the zero rate (2M) is 0.030 as explained in the paragraoh 3.1.
So by replacing in the equation (2) all the variables by their above computed value, we get
r2 = ((1 + r * t)*(1 + r1*t1) - 1)/t2
0.030687
In order to compute this zero rate, we will use the formula (1) as well. To do so, we will use the third FRA which is 3-month contract starts in 3M from the settlement date. First of all we should compute the value for each variable of the formula.
As in the previous paragraph, the maturity dates for 3M and 6M are obtained by adding 3M adn 6M to the above settlement date and will be
Tuesday, 10 Aug 2021
Wednesday, 10 Nov 2021
Let's note that the above both dates are business days, so we don't need to adjust them. Right now, we are going to compute the accrual times with Actual/360 convention.
For the accrual time $t_1 - t = maturity\_date\_3m - settlement\_date$ from May 10th 2021 and ending at Aug 10th 2021; it last 92 days, so the accrual time will be 92/360
0.255556
For the accrual time $t_2 - t = maturity\_date\_6m - settlement\_date$ from May 10th 2021 and ending at Nov 10th 2021; it last 184 days, so the accrual time will be 184/360
0.511111
For the accrual time $t_2 - t_1 = maturity\_date\_6m - maturity\_date\_3m$ from Aug 10th 2021 and ending at Nov 10th 2021; it last 92 days, so the accrual time will be 92/360
0.255556
The specified forward rate $r_{1,2}$ is 0.032 and the zero rate (3M) is 0.030 as explained in the paragraoh 3.1.
So by replacing in the equation (2) all the variables by their above computed value, we get
r2 = ((1 + r * t)*(1 + r1*t1) - 1)/t2
0.031123
In order to compute this zero rate, we will use the formula (1) as well. To do so, we will use the fourth FRA which is 3-month contract starts in 6M from the settlement date. First of all we should compute the value for each variable of the formula.
As in the previous paragraph, the maturity dates for 6M and 9M are obtained by adding 6M adn 9M to the above settlement date and will be
Wednesday, 10 Nov 2021
Thursday, 10 Feb 2022
Let's note that the above both dates are business days, so we don't need to adjust them. Right now, we are going to compute the accrual times with Actual/360 convention.
For the accrual time $t_1 - t = maturity\_date\_6m - settlement\_date$ from May 10th 2021 and ending at Nov 10th 2021; it last 184 days, so the accrual time will be 184/360
0.511111
For the accrual time $t_2 - t = maturity\_date\_9m - settlement\_date$ from May 10th 2021 and ending at Feb 10th 2022; it last 276 days, so the accrual time will be 276/360
0.766667
For the accrual time $t_2 - t_1 = maturity\_date\_9m - maturity\_date\_6m$ from Nov 10th 2021 and ending at Feb 10th 2022; it last 92 days, so the accrual time will be 92/360
0.255556
The specified forward rate $r_{1,2}$ is 0.033 and the zero rate (6M) is computed in the paragraph 3.3 and its value is 0.031123
So by replacing in the equation (2) all the variables by their above computed value, we get
r2 = ((1 + r * t)*(1 + r1*t1) - 1)/t2
0.031923
In order to compute this zero rate, we will use the formula (1) as well. To do so, we will use the fifth abd last FRA which is 3-month contract starts in 9M from the settlement date. First of all we should compute the value for each variable of the formula.
By using exactly the same reasoning as in the previous paragraph 3.5, we will easily compute the following zero rate value:
(maturity date, zero coupon) = (2022-05-10, 0.032633)
let's sum up in the following table the computed zero-coupons by maturity with Actual/360 day count convention and Simple compounding.
maturity date | zero coupon(Simple) | |
---|---|---|
0 | 2021-09-10 | 0.030058 |
1 | 2021-10-11 | 0.030687 |
2 | 2021-11-10 | 0.031123 |
3 | 2022-02-10 | 0.031923 |
4 | 2022-05-10 | 0.032633 |
Right now, we are computing the equivalent zero rates in Continuous compounding by applying the well known formula allowing to convert continuous rate to simple rate and vice versa:
\begin{equation} r\_continuous = \frac{ln(1 + r\_simple*year\_fraction)}{year\_fraction}\end{equation}where:
$year\_fraction$: the year fraction between the rate date and its maturity expressed in the specified day count convention (in our case, Actual/360)
So, by applying this fomrula we will get
maturity date | zero coupon(Simple) | zero coupon(Continuous) | |
---|---|---|---|
0 | 2021-09-10 | 0.030058 | 0.029905 |
1 | 2021-10-11 | 0.030687 | 0.030487 |
2 | 2021-11-10 | 0.031123 | 0.030878 |
3 | 2022-02-10 | 0.031923 | 0.031539 |
4 | 2022-05-10 | 0.032633 | 0.032104 |
Here is the final table
day count convention | months to start | months to end | rate | maturity date | zero coupon(Simple) | zero coupon(Continuous) | |
---|---|---|---|---|---|---|---|
0 | Actual360 | 1 | 4 | 0.030 | 2021-09-10 | 0.030058 | 0.029905 |
1 | Actual360 | 2 | 5 | 0.031 | 2021-10-11 | 0.030687 | 0.030487 |
2 | Actual360 | 3 | 6 | 0.032 | 2021-11-10 | 0.031123 | 0.030878 |
3 | Actual360 | 6 | 9 | 0.033 | 2022-02-10 | 0.031923 | 0.031539 |
4 | Actual360 | 9 | 12 | 0.034 | 2022-05-10 | 0.032633 | 0.032104 |
<AxesSubplot:xlabel='maturity date'>